package Duration知识;

import java.time.Duration;

public class DurationDemo {

    public static void main(String[] args) {
        // 示例输入，可以替换为不同的字符串表示的时间
        String ttlStr1 = "5d";  // 5天
        String ttlStr2 = "3h";  // 3小时
        String ttlStr3 = "15m"; // 15分钟
        String ttlStr4 = "45s"; // 45秒
        String ttlStr5 = "120"; // 默认秒数

        // 调用自定义解析方法并打印结果
        applyCacheConfig(ttlStr1);
        applyCacheConfig(ttlStr2);
        applyCacheConfig(ttlStr3);
        applyCacheConfig(ttlStr4);
        applyCacheConfig(ttlStr5);
    }

    // 模拟缓存配置的方法
    private static void applyCacheConfig(String ttlStr) {
        Duration duration = parseDuration(ttlStr);
        System.out.println("解析的缓存过期时间 (" + ttlStr + "): " + duration);
        // 假设这是缓存配置的过程，将Duration设置为缓存的过期时间
        // cacheConfig.entryTtl(duration);
    }

    // 自定义解析字符串的时间方法
    private static Duration parseDuration(String ttlStr) {
        // 获取时间单位（最后一位字符）
        String timeUnit = ttlStr.substring(ttlStr.length() - 1);
        long timeValue = removeDurationSuffix(ttlStr);

        switch (timeUnit) {
            case "d":
                return Duration.ofDays(timeValue);
            case "h":
                return Duration.ofHours(timeValue);
            case "m":
                return Duration.ofMinutes(timeValue);
            case "s":
                return Duration.ofSeconds(timeValue);
            default:
                return Duration.ofSeconds(Long.parseLong(ttlStr)); // 默认秒单位
        }
    }

    // 移除时间单位后缀并转换为数值
    private static long removeDurationSuffix(String ttlStr) {
        return Long.parseLong(ttlStr.substring(0, ttlStr.length() - 1));
    }
}
